from django import http
from django.http import HttpResponse
from django.shortcuts import render, redirect

# Create your views here.
from django.urls import reverse
from django.views import View

from apps.users.models import User
"""

git: https://gitee.com/itcastitheima/meiduo_44.git
微信/tel: 18310820688

"""
"""
需求分析如何分析呢?
    我们需要借助于产品给我们的原型进行分析

    1.借助于 以往的经验
    2.玩别人的类似的网站

"""

"""
一.把需求写下来

二.详细分析后端逻辑

三.确定请求方式和路由

"""

"""
debug 模式 和 断点配合使用

如何加断点
    1. 在函数的第一行处
    2. 每一行代码都加断点也不为过
    3. 要验证哪里 在哪里加一个断点
作用:
    1. 查看程序的运行是否符合预期
    2. 查看程序执行过程的数据是否符合预期
    3. 调试bug
"""
from django.contrib.auth import login

class RegisterView(View):

    def get(self,request):

        return render(request,'register.html')


    """
    一.把需求写下来

        前端: 收集 用户名,密码,确认密码,手机号
        后端: 实现注册

    二.详细分析后端逻辑

        1. 先接收数据
        2. 验证数据 (做后端开发的 不相信前端提交的任何数据)
            2.1 先验证必传数据(如果缺少任何一个,那就别验证)
            2.2 验证用户名是否符合规则
            2.3 验证密码是否符合规则
            2.4 验证确认密码和密码是否一致
            2.5 验证手机号
        3. 数据入库
        4. 返回相应

    三.确定请求方式和路由
        POST    /register



    注册成功之后 会跳转到登陆页面
    注册成功之后 默认登陆  --> 默认登陆 就是保持会话的一致性 --> cookie/session


    """

    def post(self,request):
        # 1. 先接收数据
        data = request.POST
        username=data.get('username')
        password=data.get('password')
        password2=data.get('password2')
        mobile=data.get('mobile')

        # 2. 验证数据 (做后端开发的 不相信前端提交的任何数据)
        # 2.1 先验证必传数据(如果缺少任何一个,那就别验证)
        # 如果all中的变量有一个为 None/False 则 all返回 False
        if not all([username,password2,password,mobile]):
            return http.HttpResponseBadRequest('参数缺失')

        # 2.2 验证用户名是否符合规则  5-20个字符,字母,数字,_
        import re
        if not re.match(r'[a-zA-Z0-9_-]{5,20}',username):
            return http.HttpResponseBadRequest('用户名不符合规则')
        # 2.3 验证密码是否符合规则
        if not re.match(r'[0-9A-Za-z]{8,20}',password):
            return http.HttpResponseBadRequest('密码不符合规则')
        # 2.4 验证确认密码和密码是否一致
        if password != password2:
            return http.HttpResponseBadRequest('密码不一致')
        # 2.5 验证手机号
        if not re.match(r'1[3-9]\d{9}',mobile):
            return http.HttpResponseBadRequest('手机号不符合规则')
        # 3. 数据入库
        # 如果我们使用基础学习的模型保存 密码没有加密
        # 我们可以直接调用 系统的方法来完成密码加密 create_user
        try:
            user = User.objects.create_user(username=username,
                                        password=password,
                                        mobile=mobile)
        except Exception as e:
            import logging
            logger=logging.getLogger('django')
            logger.error(e)

        # 添加一个方法 来保存登陆的状态
        login(request,user)
        # 4. 返回相应
        return redirect(reverse('contents:index'))
        # return redirect(reverse(namespace:name))
        # return HttpResponse('注册成功')